home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / amok98-106 / amok98 / programminginoberon / graphs1.mod < prev    next >
Text File  |  1993-10-07  |  1KB  |  53 lines

  1. MODULE Graphs;
  2. (* Very tiny graphics editor, Exercise 12.5, page 241.
  3.     Note: In Programming in Oberon, this module is called Graphics. It
  4.     is renamed to avoid naming conflict with the standard Draw package *)
  5.  
  6. TYPE
  7.     Figure* = POINTER TO FigureDesc;
  8.     FigureDesc* = RECORD  
  9.         draw*: PROCEDURE (fig: Figure);
  10.         next: Figure
  11.     END ;
  12.  
  13.     Graph* = POINTER TO GraphDesc;
  14.     GraphDesc* = RECORD
  15.         list: Figure
  16.     END;
  17.  
  18. VAR 
  19.     newFigure*: PROCEDURE (): Figure;
  20.     spanVect*: PROCEDURE (VAR x1, y1, x2, y2: INTEGER);
  21.  
  22. PROCEDURE InsertLast(VAR first: Figure; new: Figure);
  23. VAR f: Figure;
  24. BEGIN  (* new # NIL *)
  25.     IF first = NIL THEN new.next := first;  first := new
  26.     ELSE  f := first;
  27.         WHILE f.next # NIL DO f := f.next END;
  28.         new.next := f.next;  f.next := new
  29.     END
  30. END InsertLast;
  31.  
  32. PROCEDURE DrawAll*(g: Graph);
  33. VAR f: Figure;
  34. BEGIN  f := g.list;
  35.     WHILE f # NIL DO  f.draw(f);  f := f.next  END
  36. END DrawAll;
  37.  
  38. PROCEDURE NewFigure*(g: Graph);
  39. VAR f: Figure;
  40. BEGIN
  41.     IF newFigure # NIL THEN
  42.         f := newFigure(); 
  43.         f.draw(f);  InsertLast(g.list, f)
  44.     END
  45. END NewFigure;
  46.  
  47. PROCEDURE Open*(VAR g: Graph);
  48. BEGIN  g.list := NIL
  49. END Open;
  50.  
  51. BEGIN newFigure := NIL
  52. END Graphs.    (* Copyright M. Reiser, 1992 *)
  53.